package com.sky.controller.admin;

import com.sky.constant.MessageConstant;
import com.sky.exception.BaseException;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Objects;
import java.util.UUID;

import static sun.font.CreatedFontTracker.MAX_FILE_SIZE;

/**
 * 通用接口
 */
@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {

    /**
     * 注入工具类
     */
    @Autowired
    private AliOssUtil aliOssUtil;

    /**
     * 文件上传
     *
     * @param file
     * @return
     */
    @PostMapping("/upload")
    @ApiOperation("文件上传")
    public Result<String> upload(MultipartFile file) {
        // 参数未传入
        if(file == null){
            throw new BaseException(400, "未选择上传文件");
        }

        // 异常：未上传文件
        if (file.isEmpty()){
            throw new BaseException(400, "未选择上传文件");
        }
        // 边界：截取后缀扩展名.之前为空的文件名
        String fileName = file.getOriginalFilename();
        int dotIndex = 0; // 找最后一个.的位置
        if (fileName != null){
            dotIndex = fileName.lastIndexOf(".");
            String filenamePrefix; // 存储.之前的主文件名
            if (dotIndex == -1){
                // 情况1：无.，主文件名就是整个原始文件名
                filenamePrefix = fileName;
            } else {
                // 情况2：有.  截取0到dotIndex（不包含dotIndex，即.之前的部分）
                filenamePrefix = fileName.substring(0, dotIndex);
            }
            if(filenamePrefix.isEmpty()){
                throw new BaseException(400, "空文件名");
            }
        }
        // 异常：仅能上传 PNG JPEG JPG类型图片
        String contentType = file.getContentType();
        if (!contentType.equals("image/png") && !contentType.equals("image/jpeg") && !contentType.equals("image/jpg")){
            throw new BaseException(400, "仅能上传 PNG JPEG JPG类型图片");
        }




        log.info("文件上传:{}", file);

        try {
            //原始文件名
            String originalFilename = file.getOriginalFilename();
            //截取原始文件名的后缀扩展名
            String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
            //构造新文件名称
            String objectName = UUID.randomUUID().toString() + extension;

            //文件的请求路径
            String filePath = aliOssUtil.upload(file.getBytes(), objectName);
            return Result.success(filePath);
        } catch (IOException e) {
            log.error("文件上传失败：{}", e);
        }
        return Result.error(MessageConstant.UPLOAD_FAILED);
    }
}
